# 带入中文分词器
import jieba

path = '三国演义.txt'


# 获取文本中的词语列表
def get_text(path):
    with open(file=path, mode='r', encoding='utf-8') as f:
        return jieba.lcut(f.read())


# 执行函数 获取文本中的词语列表
words = get_text(path)
# print(words)
# 存储词语出现的次数 词语为key
counts = {}
# 不参与统计的词
includes = ['将军', '却说', '二人', '不可', '荆州', '如此', '不能',
            '商议', '如何', '主公', '军士', '左右', '军马', '引兵',
            '次日', '大喜', '天下', '于是', '东吴', '今日', '不敢',
            '魏兵', '人马', '不知', '汉中', '陛下', '一人', '众将',
            '只见', '蜀兵', '大叫', '上马', '此人', '后人', '城中',
            '------------']
for word in words:
    if len(word) == 1 or word in includes:
        # 当词语只有一个字符或者在不做计算的词语中则跳过本次计算
        continue
    elif word in ['丞相']:
        counts['曹操'] = counts.get('曹操', 0) + 1
    elif word in ['孔明曰']:
        counts['孔明'] = counts.get('孔明', 0) + 1
    elif word in ['玄德曰', '玄德']:
        counts['刘备'] = counts.get('刘备', 0) + 1
    elif word in ['关公', '云长']:
        counts['关羽'] = counts.get('关羽', 0) + 1
    elif word in ['都督']:
        counts['周瑜'] = counts.get('周瑜', 0) + 1
    else:
        # 获取不到赋默认值
        counts[word] = counts.get(word, 0) + 1

# for k, v in counts.items():
#     print(f'{k} >>> {v}')
count_list = list(counts.items())
# for tp in count_list:
#     print(tp)
# 这里的理解是，按照列表维度（指数组中第0，1，2个元素）进行排序，默认为从小到大，'reverse=True'则意味着从大到小。
# 关于维度，形象地理解如下:
# ls = [('s','he',3), ('q', 'she', 2), ('p', 'they', 1)]中，x:x[0]相当于按's', 'q', 'p'进行排序，其中x可以换成其他变量。x:x[1]
count_list.sort(key=lambda x: x[1], reverse=True)
# for tp in count_list[0:5:1]:
for tp in count_list[:5]:
    print(tp)
